In traditional GPUs, fixed function units are statically connected together to form a fixed function graphics pipeline. The output packets of each of the fixed function units, or fixed function stages, are designed to match the input packets of the downstream fixed function unit. In some conventional GPUs, programmable function stages are statically connected with fixed function units to form a graphics pipeline. Programmable function stages are implemented by writing fixed function outputs into a software-visible buffer, running the program, and reading the program outputs back into the next fixed function stage. This arrangement provides efficient flow of state and data through a graphics pipeline having programmable function stages. However, major changes to the way the graphics pipeline operates require hardware modifications to the static connections.
A more flexible approach is to define the graphics pipeline in software as a program or programs running on a programmable processor. In such a pipeline, the functional stages are implemented in software with data being moved via a regular general purpose memory system.